package com.wf.im.codec;

import com.wf.protobuf.domain.ProtoMsg;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

/**
 * Protobuf消息编码
 *
 * @author wf
 * @since 2022/5/30
 */
public class MyProtobufEncoder extends MessageToByteEncoder<ProtoMsg> {
    private static final int MAGIC_NUM = 123;

    @Override
    protected void encode(ChannelHandlerContext ctx, ProtoMsg msg, ByteBuf out) throws Exception {
        // 对象转换为字节数组
        byte[] bytes = msg.toByteArray();
        int length = bytes.length;
        // 写入长度，长度仅仅是两个字节，表明了数据包最大的净负荷长度为32 767个字节（有符号的短整数类型，
        // 如果数据包的长度较大，需要传输更多的内容，可以调用writeInt(length)方法写入长度。
        out.writeShort(length);
        // 魔数
//        out.writeInt(MAGIC_NUM);

        // 写入内容
        out.writeBytes(bytes);
    }
}
